home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 June / PCWorld_2007-06_cd.bin / v cisle / tclock / tclocklight-040702-3.exe / source / property / pagestartbtn.c < prev    next >
C/C++ Source or Header  |  2004-09-07  |  13KB  |  482 lines

  1. /*-------------------------------------------------------------
  2.   pagestartbtn.c : "Start button" page of properties
  3.   (C) Kazuto Sato 1997-2003
  4.   For the license, please read readme.txt.
  5.   
  6.   Written by Kazubon, Nanashi-san
  7. ---------------------------------------------------------------*/
  8.  
  9. #include "tcprop.h"
  10.  
  11. /* Globals */
  12.  
  13. BOOL CALLBACK PageStartButtonProc(HWND hDlg, UINT message,
  14.     WPARAM wParam, LPARAM lParam);
  15.  
  16. /* Statics */
  17.  
  18. static void SendPSChanged(HWND hDlg);
  19. static void OnInit(HWND hDlg);
  20. static void OnApply(HWND hDlg);
  21. static void InitColor(HWND hDlg);
  22. static void OnDrawItem(HWND hDlg, LPDRAWITEMSTRUCT pdis);
  23. static void InitFont(HWND hDlg);
  24. static void OnFont(HWND hDlg, BOOL bInit);
  25. static void OnStartBtn(HWND hDlg);
  26. static void OnUseBack(HWND hDlg);
  27. static void OnSansho(HWND hDlg);
  28. static void OnChooseColor(HWND hDlg);
  29. static void OnSanshoBmp(HWND hDlg);
  30.  
  31. static char *m_section = "StartButton";
  32. static BOOL m_bInit = FALSE;
  33. static BOOL m_bChanged = FALSE;
  34. static HFONT m_hfontb;
  35. static HFONT m_hfonti;
  36.  
  37. /*------------------------------------------------
  38.    dialog procedure of this page
  39. --------------------------------------------------*/
  40. BOOL CALLBACK PageStartButtonProc(HWND hDlg, UINT message,
  41.     WPARAM wParam, LPARAM lParam)
  42. {
  43.     switch(message)
  44.     {
  45.         case WM_INITDIALOG:
  46.             OnInit(hDlg);
  47.             return TRUE;
  48.         case WM_COMMAND:
  49.         {
  50.             WORD id, code;
  51.             id = LOWORD(wParam); code = HIWORD(wParam);
  52.             switch(id)
  53.             {
  54.                 case IDC_STARTBTN:
  55.                     OnStartBtn(hDlg);
  56.                     break;
  57.                 case IDC_FILESTART:
  58.                 case IDC_CAPTIONSTART:
  59.                 case IDC_STARTBTNBACKBMP:
  60.                     if(code == EN_CHANGE)
  61.                         SendPSChanged(hDlg);
  62.                     break;
  63.                 case IDC_SANSHOSTART:
  64.                     OnSansho(hDlg);
  65.                     break;
  66.                 case IDC_STARTBTNCOL:
  67.                 case IDC_STARTBTNFONT:
  68.                 case IDC_STARTBTNFONTSIZE:
  69.                     if(code == CBN_SELCHANGE || code == CBN_EDITCHANGE)
  70.                     {
  71.                         if(id == IDC_STARTBTNFONT) OnFont(hDlg, FALSE);
  72.                         SendPSChanged(hDlg);
  73.                     }
  74.                     break;
  75.                 case IDC_STARTBTNCHOOSECOL:
  76.                     OnChooseColor(hDlg);
  77.                     break;
  78.                 case IDC_SANSHOSTARTBACKBMP:
  79.                     OnSanshoBmp(hDlg);
  80.                     break;
  81.                 case IDC_STARTBTNUSEBACK:
  82.                     OnUseBack(hDlg);
  83.                     SendPSChanged(hDlg);
  84.                     break;
  85.                 case IDC_STARTBTNBOLD:
  86.                 case IDC_STARTBTNITALIC:
  87.                 case IDC_STARTBTNFLAT:
  88.                 case IDC_STARTBTNHIDE:
  89.                 case IDC_STARTMENUCLOCK:
  90.                     SendPSChanged(hDlg);
  91.                     break;
  92.             }
  93.             return TRUE;
  94.         }
  95.         case WM_NOTIFY:
  96.             switch(((NMHDR *)lParam)->code)
  97.             {
  98.                 case PSN_APPLY: OnApply(hDlg); break;
  99.                 case PSN_HELP: MyHelp(GetParent(hDlg), "StartButton"); break;
  100.             }
  101.             return TRUE;
  102.         case WM_MEASUREITEM:
  103.             // common/comobox.c
  104.             OnMeasureItemColorCombo((LPMEASUREITEMSTRUCT)lParam);
  105.             return TRUE;
  106.         case WM_DRAWITEM:
  107.             OnDrawItem(hDlg, (LPDRAWITEMSTRUCT)lParam);
  108.             return TRUE;
  109.         case WM_DESTROY:
  110.             DeleteObject(m_hfontb);
  111.             DeleteObject(m_hfonti);
  112.             break;
  113.     }
  114.     return FALSE;
  115. }
  116.  
  117. /*------------------------------------------------
  118.   notify parent window to enable "Apply" button
  119. --------------------------------------------------*/
  120. void SendPSChanged(HWND hDlg)
  121. {
  122.     if(m_bInit)
  123.     {
  124.         g_bApplyTaskbar = TRUE;
  125.         m_bChanged = TRUE;
  126.         SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)(hDlg), 0);
  127.     }
  128. }
  129.  
  130. /*------------------------------------------------
  131.   initialize
  132. --------------------------------------------------*/
  133. void OnInit(HWND hDlg)
  134. {
  135.     BOOL b;
  136.     char s[MAX_PATH], s2[MAX_PATH];
  137.     LOGFONT logfont;
  138.     
  139.     m_bInit = FALSE;
  140.     
  141.     // common/tclang.c
  142.     SetDialogLanguage(hDlg, "StartButton", g_hfontDialog);
  143.     
  144.     b = GetMyRegLong(NULL, "StartButton", FALSE);
  145.     b = GetMyRegLong(m_section, "StartButton", b);
  146.     CheckDlgButton(hDlg, IDC_STARTBTN, b);
  147.     
  148.     GetMyRegStr(NULL, "StartButtonIcon", s, MAX_PATH, "");
  149.     GetMyRegStr(m_section, "Icon", s2, MAX_PATH, s);
  150.     SetDlgItemText(hDlg, IDC_FILESTART, s2);
  151.     
  152.     GetMyRegStr(NULL, "StartButtonCaption", s, 80, "Start");
  153.     GetMyRegStr(m_section, "Caption", s2, 80, s);
  154.     SetDlgItemText(hDlg, IDC_CAPTIONSTART, s2);
  155.     
  156.     InitColor(hDlg);
  157.     
  158.     InitFont(hDlg);
  159.     OnFont(hDlg, TRUE);
  160.     
  161.     CheckDlgButton(hDlg, IDC_STARTBTNBOLD,
  162.         GetMyRegLong(m_section, "Bold", TRUE));
  163.     CheckDlgButton(hDlg, IDC_STARTBTNITALIC,
  164.         GetMyRegLong(m_section, "Italic", FALSE));    
  165.     
  166.     m_hfontb = m_hfonti = NULL;
  167.     if(g_hfontDialog)
  168.     {
  169.         GetObject(g_hfontDialog, sizeof(LOGFONT), &logfont);
  170.         logfont.lfWeight = FW_BOLD;
  171.         m_hfontb = CreateFontIndirect(&logfont);
  172.         SendDlgItemMessage(hDlg, IDC_STARTBTNBOLD,
  173.             WM_SETFONT, (WPARAM)m_hfontb, 0);
  174.         
  175.         logfont.lfWeight = FW_NORMAL;
  176.         logfont.lfItalic = 1;
  177.         m_hfonti = CreateFontIndirect(&logfont);
  178.         SendDlgItemMessage(hDlg, IDC_STARTBTNITALIC,
  179.             WM_SETFONT, (WPARAM)m_hfonti, 0);
  180.         
  181.         GetDlgItemText(hDlg, IDC_STARTBTNITALIC, s, 77);
  182.         strcat(s, "  ");
  183.         SetDlgItemText(hDlg, IDC_STARTBTNITALIC, s);
  184.     }
  185.     
  186.     b = GetMyRegLong(m_section, "UseBackBmp", FALSE);
  187.     CheckDlgButton(hDlg, IDC_STARTBTNUSEBACK, b);
  188.     
  189.     GetMyRegStr(m_section, "BackBmp", s, 80, "");
  190.     SetDlgItemText(hDlg, IDC_STARTBTNBACKBMP, s);
  191.     
  192.     if(!IsXPVisualStyle())
  193.     {
  194.         b = GetMyRegLong(NULL, "StartButtonFlat", FALSE);
  195.         b = GetMyRegLong(m_section, "Flat", b);
  196.         CheckDlgButton(hDlg, IDC_STARTBTNFLAT, b);
  197.     }
  198.     
  199.     b = GetMyRegLong(NULL, "StartButtonHide", FALSE);
  200.     b = GetMyRegLong(m_section, "Hide", b);
  201.     CheckDlgButton(hDlg, IDC_STARTBTNHIDE, b);
  202.     
  203.     b = GetMyRegLong(NULL, "StartMenuClock", FALSE);
  204.     b = GetMyRegLong(m_section, "StartMenuClock", b);
  205.     CheckDlgButton(hDlg, IDC_STARTMENUCLOCK, b);
  206.     
  207.     OnStartBtn(hDlg);
  208.     
  209.     m_bInit = TRUE;
  210. }
  211.  
  212. /*------------------------------------------------
  213.   Apply changes
  214. --------------------------------------------------*/
  215. void OnApply(HWND hDlg)
  216. {
  217.     char s[MAX_PATH];
  218.     
  219.     if(!m_bChanged) return;
  220.     m_bChanged = FALSE;
  221.     
  222.     SetMyRegLong(m_section, "StartButton",
  223.         IsDlgButtonChecked(hDlg, IDC_STARTBTN));
  224.     
  225.     GetDlgItemText(hDlg, IDC_FILESTART, s, MAX_PATH);
  226.     SetMyRegStr(m_section, "Icon", s);
  227.     
  228.     GetDlgItemText(hDlg, IDC_CAPTIONSTART, s, 80);
  229.     SetMyRegStr(m_section, "Caption", s);
  230.     
  231.     SetMyRegLong(m_section, "CaptionColor",
  232.         CBGetItemData(hDlg, IDC_STARTBTNCOL,
  233.             CBGetCurSel(hDlg, IDC_STARTBTNCOL)));
  234.     
  235.     CBGetLBText(hDlg, IDC_STARTBTNFONT,
  236.         CBGetCurSel(hDlg, IDC_STARTBTNFONT), s);
  237.     SetMyRegStr(m_section, "Font", s);
  238.     
  239.     GetDlgItemText(hDlg, IDC_STARTBTNFONTSIZE, s, 10);
  240.     if(s[0]) SetMyRegStr(m_section, "FontSize", s);
  241.     else SetMyRegStr(m_section, "FontSize", "9");
  242.     
  243.     SetMyRegLong(m_section, "Bold",
  244.         IsDlgButtonChecked(hDlg, IDC_STARTBTNBOLD));
  245.     SetMyRegLong(m_section, "Italic",
  246.         IsDlgButtonChecked(hDlg, IDC_STARTBTNITALIC));
  247.     
  248.     
  249.     SetMyRegLong(m_section, "UseBackBmp",
  250.         IsDlgButtonChecked(hDlg, IDC_STARTBTNUSEBACK));
  251.     
  252.     GetDlgItemText(hDlg, IDC_STARTBTNBACKBMP, s, MAX_PATH);
  253.     SetMyRegStr(m_section, "BackBmp", s);
  254.     
  255.     SetMyRegLong(m_section, "Flat",
  256.         IsDlgButtonChecked(hDlg, IDC_STARTBTNFLAT));
  257.     
  258.     SetMyRegLong(m_section, "Hide",
  259.         IsDlgButtonChecked(hDlg, IDC_STARTBTNHIDE));
  260.     SetMyRegLong(m_section, "StartMenuClock",
  261.         IsDlgButtonChecked(hDlg, IDC_STARTMENUCLOCK));
  262. }
  263.  
  264. /*------------------------------------------------
  265.    initizlize "Color" comoboxes
  266. --------------------------------------------------*/
  267. void InitColor(HWND hDlg)
  268. {
  269.     COLORREF cols[4], colDef;
  270.     
  271.     cols[0] = 0x80000000|COLOR_3DFACE;
  272.     cols[1] = 0x80000000|COLOR_3DSHADOW;
  273.     cols[2] = 0x80000000|COLOR_3DHILIGHT;
  274.     cols[3] = 0x80000000|COLOR_BTNTEXT;
  275.     
  276.     colDef = GetMyRegLong(m_section, "CaptionColor",
  277.         0x80000000 | COLOR_BTNTEXT);
  278.     // common/combobox.c
  279.     InitColorCombo(hDlg, IDC_STARTBTNCOL, cols, 4, colDef);
  280. }
  281.  
  282. /*------------------------------------------------
  283.   WM_DRAWITEM message
  284. --------------------------------------------------*/
  285. void OnDrawItem(HWND hDlg, LPDRAWITEMSTRUCT pdis)
  286. {
  287.     char texts[4][80];
  288.     strcpy(texts[0], MyString(IDS_BTNFACE, "ButtonFace"));
  289.     strcpy(texts[1], MyString(IDS_BTNSHADOW, "ButtonShadow"));
  290.     strcpy(texts[2], MyString(IDS_BTNLIGHT, "ButtonLight"));
  291.     strcpy(texts[3], MyString(IDS_BTNTEXT, "ButtonText"));
  292.     
  293.     // common/comobox.c
  294.     OnDrawItemColorCombo(pdis, texts);
  295. }
  296.  
  297. /*------------------------------------------------
  298.    Initialization of "Font" combo box
  299. --------------------------------------------------*/
  300. void InitFont(HWND hDlg)
  301. {
  302.     char s[80];
  303.     
  304.     GetMyRegStr(m_section, "Font", s, 80, "");
  305.     if(s[0] == 0)
  306.     {
  307.         HFONT hfont;
  308.         hfont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
  309.         if(hfont)
  310.         {
  311.             LOGFONT lf;
  312.             GetObject(hfont, sizeof(lf), (LPVOID)&lf);
  313.             strcpy(s, lf.lfFaceName);
  314.         }
  315.     }
  316.     
  317.     // common/combobox.c
  318.     InitFontNameCombo(hDlg, IDC_STARTBTNFONT, s);
  319. }
  320.  
  321. /*------------------------------------------------
  322.    set sizes to "Font Size" combo box
  323. --------------------------------------------------*/
  324. void OnFont(HWND hDlg, BOOL bInit)
  325. {
  326.     char s[160], size[10];
  327.     int charset;
  328.     int index;
  329.     
  330.     if(bInit)
  331.         GetMyRegStr(m_section, "FontSize", size, 10, "9");
  332.     else
  333.         GetDlgItemText(hDlg, IDC_STARTBTNFONTSIZE, size, 10);
  334.     
  335.     CBGetLBText(hDlg, IDC_STARTBTNFONT,
  336.         CBGetCurSel(hDlg, IDC_STARTBTNFONT), (LPARAM)s);
  337.     charset = CBGetItemData(hDlg, IDC_STARTBTNFONT,
  338.         CBGetCurSel(hDlg, IDC_STARTBTNFONT));
  339.     
  340.     // common/combobox.c
  341.     InitFontSizeCombo(hDlg, IDC_STARTBTNFONTSIZE, s, charset);
  342.     
  343.     index = CBFindStringExact(hDlg, IDC_STARTBTNFONTSIZE, size);
  344.     if(index == CB_ERR)
  345.         SetDlgItemText(hDlg, IDC_STARTBTNFONTSIZE, size);
  346.     else CBSetCurSel(hDlg, IDC_STARTBTNFONTSIZE, index);
  347. }
  348.  
  349. /*------------------------------------------------
  350.   "Customize Start button" is checked
  351. --------------------------------------------------*/
  352. void OnStartBtn(HWND hDlg)
  353. {
  354.     HWND hwnd;
  355.     BOOL b;
  356.     
  357.     b = IsDlgButtonChecked(hDlg, IDC_STARTBTN);
  358.     
  359.     if(!b) OnUseBack(hDlg);
  360.     
  361.     hwnd = GetDlgItem(hDlg, IDC_STARTBTN);
  362.     hwnd = GetWindow(hwnd, GW_HWNDNEXT);
  363.     while(hwnd)
  364.     {
  365.         EnableWindow(hwnd, b);
  366.         if(GetDlgCtrlID(hwnd) == IDC_STARTBTNFLAT) break;
  367.         
  368.         hwnd = GetWindow(hwnd, GW_HWNDNEXT);
  369.     }
  370.     
  371.     if(b) OnUseBack(hDlg);
  372.     
  373.     SendPSChanged(hDlg);
  374. }
  375.  
  376. /*------------------------------------------------
  377.   "Background" is checked
  378. --------------------------------------------------*/
  379. void OnUseBack(HWND hDlg)
  380. {
  381.     BOOL b;
  382.     
  383.     b = IsDlgButtonChecked(hDlg, IDC_STARTBTNUSEBACK);
  384.     EnableDlgItem(hDlg, IDC_STARTBTNBACKBMP, b);
  385.     EnableDlgItem(hDlg, IDC_SANSHOSTARTBACKBMP, b);
  386.     
  387.     if(IsXPVisualStyle())
  388.         EnableDlgItem(hDlg, IDC_STARTBTNFLAT, FALSE);
  389.     else EnableDlgItem(hDlg, IDC_STARTBTNFLAT, !b);
  390. }
  391.  
  392. /*------------------------------------------------
  393.    "..." button
  394. --------------------------------------------------*/
  395. void OnSansho(HWND hDlg)
  396. {
  397.     char *filter = "Bitmap, Icon (*.bmp, *.ico)\0*.bmp;*.ico\0"
  398.         "Executable (*.exe, *.dll)\0*.exe;*.dll\0"
  399.         "All (*.*)\0*.*\0\0";
  400.     char deffile[MAX_PATH], fname[MAX_PATH+10];
  401.     char s[MAX_PATH+10], num[10];
  402.     HFILE hf = HFILE_ERROR;
  403.     char head[2];
  404.     
  405.     deffile[0] = 0;
  406.     GetDlgItemText(hDlg, IDC_FILESTART, s, MAX_PATH);
  407.     if(s[0])
  408.     {
  409.         parse(deffile, s, 0, MAX_PATH);
  410.         parse(num, s, 1, 10);
  411.         hf = _lopen(deffile, OF_READ);
  412.     }
  413.     if(hf != HFILE_ERROR)
  414.     {
  415.         _lread(hf, head, 2);
  416.         _lclose(hf);
  417.         
  418.         if(head[0] == 'M' && head[1] == 'Z') // executable
  419.         {
  420.             // select icon : selecticon.c
  421.             if(SelectIconInDLL(g_hInst, hDlg, deffile))
  422.             {
  423.                 SetDlgItemText(hDlg, IDC_FILESTART, deffile);
  424.                 PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
  425.                 SendPSChanged(hDlg);
  426.             }
  427.             return;
  428.         }
  429.     }
  430.     
  431.     // select file : common/selectfile.c
  432.     if(!SelectMyFile(g_hInst, hDlg, filter, 0, deffile, fname))
  433.         return;
  434.     
  435.     hf = _lopen(fname, OF_READ);
  436.     if(hf == HFILE_ERROR) return;
  437.     _lread(hf, head, 2);
  438.     _lclose(hf);
  439.     if(head[0] == 'M' && head[1] == 'Z') // executable
  440.     {
  441.         // select icon : selecticon.c
  442.         if(!SelectIconInDLL(g_hInst, hDlg, fname)) return;
  443.     }
  444.     
  445.     SetDlgItemText(hDlg, IDC_FILESTART, fname);
  446.     PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
  447.     SendPSChanged(hDlg);
  448. }
  449.  
  450. /*------------------------------------------------
  451.   "..." button (choose color)
  452. --------------------------------------------------*/
  453. void OnChooseColor(HWND hDlg)
  454. {
  455.     // common/combobox.c
  456.     ChooseColorWithCombo(g_hInst, hDlg, IDC_STARTBTNCOL);
  457.     
  458.     PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
  459.     SendPSChanged(hDlg);
  460. }
  461.  
  462. /*------------------------------------------------
  463.    "..." button (background image)
  464. --------------------------------------------------*/
  465. void OnSanshoBmp(HWND hDlg)
  466. {
  467.     char *filter = "Bitmap (*.bmp)\0*.bmp\0\0";
  468.     char deffile[MAX_PATH], fname[MAX_PATH+10];
  469.     
  470.     deffile[0] = 0;
  471.     GetDlgItemText(hDlg, IDC_STARTBTNBACKBMP, deffile, MAX_PATH);
  472.     
  473.     // select file : common/selectfile.c
  474.     if(!SelectMyFile(g_hInst, hDlg, filter, 0, deffile, fname))
  475.         return;
  476.     
  477.     SetDlgItemText(hDlg, IDC_STARTBTNBACKBMP, fname);
  478.     PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
  479.     SendPSChanged(hDlg);
  480. }
  481.  
  482.